package aplicacion.modelo;
import java.awt.Point;

import titiritero.Posicionable;


/** Implementa una celda vacia **/
public class Celda implements IRecorrible, Posicionable {

	private boolean visitada;
	private Point posicion;
	private final static int PUNTOS=0;
	
	
	public Celda(Point posicion) {
		this.setVisitada(false);
		this.posicion=posicion;
	}
	
	public boolean estaBloqueada() {
		return false;
	}
	
	public CeldasVecinas obtenerCeldasVecinas() {
		CeldasVecinas celdasVecinas=new CeldasVecinas();
		Tablero tablero=Juego.getInstance().getTablero();
		int maximoX=tablero.getCantidadColumnas();
		int maximoY=tablero.getCantidadFilas();
		int posicionX=this.getPosicion().x;
		int posicionY=this.getPosicion().y;
		
		if((posicionX-1)>=0){
			celdasVecinas.add(tablero.getCelda(new Point(posicionX-1,posicionY)));
		}
		if((posicionX+1<=maximoX)){
			celdasVecinas.add(tablero.getCelda(new Point(posicionX+1,posicionY)));
		}
		if((posicionY-1)>=0){
			celdasVecinas.add(tablero.getCelda(new Point(posicionX,posicionY-1)));
		}
		if((posicionY+1<=maximoY)){
			celdasVecinas.add(tablero.getCelda(new Point(posicionX,posicionY+1)));
		}
		return celdasVecinas;
	}
	
	public Point getPosicion(){
		return posicion;
	}
	
	public void aumentarPuntaje(int puntos){
		Juego.getInstance().getPuntaje().aumentarPuntaje(puntos);
	}

	public boolean compararCon(Celda celda) {
		return (this.posicion).equals(celda.getPosicion());
	}

	@Override
	public Point recorrer() {
		this.setVisitada(true);
		return posicion;
	}

	public void setVisitada(boolean visitada) {
		this.visitada = visitada;
	}

	public boolean estaVisitada() {
		return visitada;
	}

	public int getPuntosOtorgados() {
		return PUNTOS;
	}

	public int getPuntaje() {
		return Juego.getInstance().getPuntaje().getPuntaje();
	}	
	
	@Override
	public int getX() {
		return getPosicion().x;
	}

	@Override
	public int getY() {
		return getPosicion().y;
	}
}
